package mylab.starters.mybatis;

import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor;

public interface OrderlyPlugin extends InnerInterceptor, Comparable<OrderlyPlugin> {

    int TenantLine = -90;
    int TenantColumn = TenantLine;
    int TenantSchema = TenantLine;
    int DataPermission = -80;
    int DataScope = DataPermission;
    int DynamicTableName = -60;
    int Pagination = 0;
    int OptimisticLocker = 10;
    int IllegalSQL = 70;
    int BlockAttack = 80;
    int ForeignKey = 90;
    int DataChangeRecorder = 99;

    /**
     * 插件序号，要注意该插件与分页插件的位置关系
     * 注意:
     * 如果内部插件都是使用,需要注意顺序关系,建议使用如下顺序：
     * 多租户插件,动态表名插件
     * 分页插件,乐观锁插件
     * sql性能规范插件,防止全表更新与删除插件
     * 总结: 对sql进行单次改造的优先放入,不对sql进行改造的最后放入
     *
     * @return 序号
     */
    default int getOrder() {
        return -1;
    }

    /**
     * 插件描述
     *
     * @return 插件描述
     */
    String getDescription();


    default int compareTo(OrderlyPlugin o) {
        return Integer.compare(getOrder(), o.getOrder());
    }

}
